package com.juzipi.common.utils.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

/**
 * jwt生成工具类
 */

public class JWTUtils {

    /**
     * 生成token
     * @param claims 荷载
     * @param salt 盐，密钥
     * @return
     */
    //生成token   header payload signature 头 荷载 签名
    public static String getToken(Map<String,String> claims,String salt){

        JWTCreator.Builder builder = JWT.create();
//        builder.withHeader()//头部就用默认的了 默认是这个算法：HMAC256

        //放入传来的 key 和 value，作为 payload 荷载
        claims.forEach(builder::withClaim);

        //signature 签名
//        builder.withExpiresAt()//指定令牌过期时间
        return builder.sign(Algorithm.HMAC256(salt));//这里要和头部加密的方法一致
    }


    /**
     * 验证token
     * @param token token
     * @param salt 密钥，盐
     * @return 解析后的结果，可以取出荷载
     */
    public static DecodedJWT verify(String token,String salt) {
        try {
            if (StringUtils.isNotBlank(token)){
                //验证通过直接返回
                return JWT.require(Algorithm.HMAC256(salt)).build().verify(token);
            }
        } catch (JWTVerificationException | IllegalArgumentException e) {
            e.printStackTrace();
        }
        return null;
    }


}
